热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

峰值|容忍度_如何做压测?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何做压测?相关的知识,希望对你有一定的参考价值。简介:

篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何做压测?相关的知识,希望对你有一定的参考价值。




简介:压测的一般流程和方法是什么?需要关注哪些数据指标?如何推算后端需要支持的qps?本文分享总结压测过程中需要注意的问题,希望对同学们有所启发,欢迎讨论~


一 压测目标

在开始做压测计划之前,一定要先明确压测的目标是什么,虽然最终的目标肯定都是优化系统的性能,但是不同的出发点,可能需要采取不同的方法。

一般来说,可能有以下一些目的:


1 挖掘系统瓶颈点,优化系统性能

尤其对新系统上线,缺乏性能基线数据,此时压测一般没有明确的qps/rt等指标,而是通过不断施压,不断逼近系统的极限,从而暴露问题,修复问题。


2 建立性能基线

主要是为了收集系统当前的最大性能指标,一般会根据业务特点,先确定对rt和错误率的容忍度,然后通过压测推算出能够支持的最大qps, 并发量等。

同时可以结合性能指标和监控数据,来建立合理的预警机制,设立系统水位报警项,限流阈值,弹性策略等。

量化系统能力/SLA等 (比如在竞标中引用)。


3 性能回归

对于已上线系统,或者性能需求明确的系统,可以根据线上实际的运行情况,确定系统需要支撑的qps/rt, 然后在涉及性能影响前做回归校验,确保性能满足预期。


4 系统稳定性

更侧重在一定压力的情况下,系统是否能长时间稳定持续的提供SLA保障。

一般可以考虑将压力设定到业务峰值的80%,持续施压。


5 网络/线路延迟稳定性等

在一些特殊的业务场合,对延迟的容忍度极小,比如DNS解析,CDN服务,多人实时在线游戏,高频交易等等,需要网络质量,尤其是不同线路(电信/联通/教育网/...)间的差异。


二 压测对象

明确了压测目标后 ,就是确定要压什么,来实现目标。

一般来说,压测对象可以这么分:


  • 后端

    • 单api

    • 单业务逻辑场景
  • 前端

    • 单request

    • 单操作

    • 单页

    • 整体页面平均情况

三 压测数据

压测过程中,一般主要关注一下数据指标:


1 starter/client

最重要的三个指标:


  • qps
  • rt
  • 成功率

其他的:


  • 页面平均响应时间 (重要)。
  • 并发量(其实没那么重要,主要还是qps)。
  • 最大用户同时在线数 (用户登录系统,一般不需要额外压测,除非业务场景特殊)。
  • 网络质量(延迟,波动等,不展开)。

2 server

主要是监控数据:


  • cpu usage
  • load
  • mem
  • jvm/fullGC
  • 连接数(netstat)
  • disk io (iostat / iotop)

四 压测结果分析

一般是随着压力的增加(并发请求的增加)探究qps/rt/成功率三者的关系,从而找到系统的平衡点,如果能结合服务端的监控数据,就更好。




五 压测工具


1 jmeter

concurrent Thread Group

java sampler


composite chart

可以将多个chart组合到一个chart中,并且坐标系会自动伸缩,方便在一个图中展示结果。



六 性能指标推算方法

以上都是一些系统向的指标数据,其实对用户来说是不感知,或者说也是没有意义的。那什么样的数字是有意义的呢?举个例子:

如果你提供的是一个在线的网页服务,那用户可能关心的是,你的系统在保证不察觉卡顿的情况下(系统的SLA, 实际可能容忍存在偶发的页面错误重试)能承受多少人并发使用。

如果你提供的是个结算系统,那用户可能关心的是,在保证交易有效性的情况下(不能出错,但是可以偶发超时重试,同样是系统的SLA),每秒可以处理多少笔订单。

举例分析:


1 基本算法

此处pv表意不清,实为后端日志统计的后端api的调用次数,如果有前端统计的一般意义上的pv(page visit),基本原理相同,可以简单换算一下,pv * x-ratio = 后端调用次数。


  1. 获取现场每日asapi PV/UV的均值/峰值。
  2. 取Max(PV峰值*0.8,每日PV均值)作为目标PV', PV'时段的UV值作为实际并发用户参考值N', 计算PV'/perMinute/N'作为每分钟用户操作触发api次数O'。
  3. 根据以下规则换算成后端需要支持的qps:

  • 3.1 模型假设:2/8原则——每日有80%的PV发生在20%的工作时间内(ratio=0.8)。
  • 3.2 假设页面单个请求映射到后端api请求比例为1:10,假设一天working hour为8小时 (e=10)。
  • 3.3 假设一般用户,高峰期每分钟操作页面10次 (o=10)。
  • 3.4 根据现场日PV计算支持N'用户并发操作需要的qps:PV' * ratio/(working hour∗60∗60∗(1−ratio) )= qps
  • 3.5 根据现场峰值小时级PV计算支持N'用户并发操作需要的qps:PV' * ratio/(1∗60∗60∗(1−ratio) ) = qps

  1. 根据压测qps推算能够支持的最大用户同时使用数:

  • 4.1 同样基于上述公式,根据上述假设,1分钟内,每个用户操作10次,每次前端操作对应后端10个api:

    • 1分钟PV = N 10 10

    • N 10 10 / 60 = qps ==> N = qps * 0.6
  • 4.2 如果按照小时为单位推算,1个小时内,每个用户操作页面100次,每次前端操作对应后端10个api:

    • 60分钟PV = N 100 10

    • N 100 10 / 6060 = qps ==> N = qps 3.6

2 正向推演

如果现场环境数据表明,高峰期9:00~10:00有50人登录过系统,pv累计10000,那么根据(3.1),系统整体qps >= 11+ 才能维持当前用户量正常使用。


3 反向推演

如果家里环境压测结果表明,随机API调用qps=30, 保持上述假设,参照(4.2),即可支撑18人高峰期同时操作。


4 不严谨的地方

上述算法针对随机API按照1:1计算,实际上调用肯定是不均匀的,可以根据现场的数据统计下api的调用分布,压测是模拟相同的调用分布尽量贴近实际。

另外用户每分钟操作页面次数,和每次前端请求对应后端api的膨胀比都是预估出来的,虽然可以根据模型做近似,但是不如直接根据现场数据计算出来准确。


七 其他考量


  • 链路跟踪能力,分析瓶颈点

    • api log

    • eagleye-traceId


  • 缓存对数据库的影响

    • 是否需要压到db层,要考虑压测场景。


    • 是否需要创造海量的随机压测数据 (比如针对单用户的缓存优化场景,单一用户的性能不能用来推送多用户并发的场景)。
  • 同步接口异步接口的压测 (staragent)

    • 主要考验后台任务处理能力(异步任务提交即时返回了)。
  • 系统不同层次的限流设置对API的影响

    • 比如有业务层的限流如Sentinel, nginx层的限流如X5, 或者其他基于LVS的限流等。
  • 消息通信,尤其是广播消息。
  • 数据库,尤其是写一致性。
  • 复杂场景的长链路调用。
  • Nginx/Tomcat的配置对请求的影响。
  • 容易忽视的对象序列化/反序列化对性能的影响。
  • 热点数据。

原文链接:https://developer.aliyun.com/article/779380?



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

推荐阅读
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • 在优化Nginx与PHP的高效配置过程中,许多教程提供的配置方法存在诸多问题或不良实践。本文将深入探讨这些常见错误,并详细介绍如何正确配置Nginx和PHP,以实现更高的性能和稳定性。我们将从Nginx配置文件的基本指令入手,逐步解析每个关键参数的最优设置,帮助读者理解其背后的原理和实际应用效果。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
author-avatar
swaimprichett_556
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有